package com.jrx.anytxn.transaction.service;

import com.jrx.anytxn.common.exception.TxnBizException;
import com.jrx.anytxn.common.exception.TxnException;
import com.jrx.anytxn.customer.dto.customer.CustomerRes;
import com.jrx.anytxn.customer.entity.CmCustomerBankcardInfo;
import com.jrx.anytxn.i18n.response.TxnPage;
import com.jrx.anytxn.param.entity.PrProductTable;
import com.jrx.anytxn.transaction.bean.LoanAbnormalQueueBean;
import com.jrx.anytxn.transaction.dto.loan.CancelOrderQueryRes;
import com.jrx.anytxn.transaction.dto.transactionLog.TlDisbursementLogRes;
import com.jrx.anytxn.transaction.entity.AmLoanMainInfo;
import com.jrx.anytxn.transaction.entity.TlDisbursementLog;

import java.util.Date;

/**
 * 放款支付流水service
 *
 * @author : zhenghaopu
 * 2019/10/29
 */
public interface IDisbursementLogService {

    /**
     * 构建放款支付流水
     * 创建支付流水对象
     *
     * @param amLoanMainInfo 贷款信息
     * @param customerRes    客户信息
     * @param customerBank   客户银行卡信息
     * @param prProductTable 产品信息
     * @param businessDate   业务日期
     * @return 放款支付流水对象
     * @throws TxnBizException 自定义异常
     */
    TlDisbursementLog buildTlDisbursementLog(AmLoanMainInfo amLoanMainInfo, CustomerRes customerRes,
                                             CmCustomerBankcardInfo customerBank, PrProductTable prProductTable,Date businessDate) throws TxnException;



    /**
     * 根据以下条件查询放款流水信息
     *
     * @param tenantId   租户ID
     * @param loanId     订单ID
     * @param customerId 客户ID
     * @return com.jrx.anytxn.transaction.entity.TlDisbursementLog
     * @author fan.yang
     * date: 2020/5/27 0027 下午 14:35
     */
    TlDisbursementLog getTlDisbursementLogByLoanIdAndCusId(String tenantId, String loanId, String customerId);


    /**
     * 客服放款流水详情查看
     * @author fan.yang
     * date: 2020/7/28 0028 下午 14:28
     * @param tenantId 租户ID
     * @param seqNo 流水号
     * @param customerId 客户ID
     * @return com.jrx.anytxn.transaction.dto.transactionLog.TlDisbursementLogRes
     */
    TlDisbursementLogRes getTlDisbursementBySeqNoAndCusId(String tenantId, String seqNo, String customerId);

    /**
     * 客服放款流水信息列表查询
     * @author fan.yang
     * date: 2020/7/28 0028 下午 14:28
     * @param channel 渠道
     * @param customerId 客户ID
     * @param tenantId 租户ID
     * @param pageNum 页码
     * @param pageSize 页大小
     * @param seqNo 流水号
     * @param beginDate 开始时间
     * @param endDate 结束时间
     * @return com.jrx.anytxn.i18n.response.TxnPage<com.jrx.anytxn.transaction.dto.transactionLog.TlDisbursementLogRes>
     */
    TxnPage<TlDisbursementLogRes> getDisbursementWithPage(String channel, String customerId, String tenantId, Integer pageNum, Integer pageSize, String seqNo, String beginDate, String endDate);

    /**
     * 分页查询放款异常队列
     * @param abnormalQueueBean 分页查询条件
     * @return
     */
    TxnPage<TlDisbursementLogRes> queryLoanAbnormalQueue(LoanAbnormalQueueBean abnormalQueueBean);

    /**
     *
     * 撤销订单
     *
     *
     * @param businessDate
     * @param operStatus
     * @param seqNo 流水号
     * @param tenantId 租戶id
     * @param nickName 操作人
     * @return
     */
    CancelOrderQueryRes cancelOrder(Date businessDate, String operStatus, String seqNo, String tenantId, String nickName);

    /**
     * 放款结果查询重试
     * @param disId 放款流水表主键id
     * @param nickName 操作人
     */
    void queryRetry(Long disId, String nickName);
}
